Abstract Según la OMS, el cáncer de mama es una enfermedad que afectó a aproximadamente 2.3 millones de mujeres en 2020, siendo una de las principales causas de mortalidad en mujeres en todo el mundo (“Cáncer de Mama” n.d.). Sin embargo, se indica que una de las principales formas de combate a esta enfermedad está en el diagnóstico temprano. Teniendo esto en cuenta, ¿cuales son los parámetros de los signos vitales de una persona más relevantes para poder determinar si está afectada por el cáncer de mama?. A continuación se analizarán los datos de 116 pacientes, de las cuales 64 poseen cáncer de mama.

1 Descripción de los datos

Los datos que usaremos a continuación corresponden a 116 pacientes mujeres, de los cuales 64 han sido diagnosticados con cáncer de mama. Las variables de estos datos corresponden a:

2 Preparación de los datos

Dado que los datos presentan distintas escalas, será necesario normalizar los datos. Para ello se utilizará la siguiente función.

normalize_min_max <- function(x) {
  return((x - min(x)) / (max(x) - min(x)))
}

Y posteriormente crearemos un nuevo DataFrame con los datos ya normalizados en una escala de 0 a 1.

columnas_a_normalizar = c(
  "Age", "BMI", "Glucose", "Insulin", "HOMA", "Leptin", "Adiponectin", "Resistin", "MCP.1",
  "Classification")

data_normalizada = data

data_normalizada[columnas_a_normalizar] = lapply(data_normalizada[columnas_a_normalizar], normalize_min_max)

Ahora tenemos una data normalizada como la siguiente.

head(data_normalizada, n = 3)

3 Análisis de los datos

3.1 Matriz de covarianza

Con los datos ya normalizados, será necesario generar una matriz de covarianza para averiguar qué tan correlacionados se encuentran los datos. Para esto se aplicará el médoto de correlación de Pearson.

cov_matrix = cor(data_normalizada, method="pearson")

Para mejorar la visualización de estos datos, usaremos un gráfico de mapa de calor (heatmap).

#Segun los datos calculados por método Pearson
corrplot(cov_matrix, method = 'number', col = viridis::viridis(200), bg = "white", tl.cex = 0.8, tl.col = "black", tl.srt = 45, addCoef.col = "black", is.corr = TRUE)
# Agregar un título al final del mapa de calor
mtext("Matriz de correlación - Pearson", side = 2, line = 1, cex = 1.5)

Si nos enfocamos en la clasificación del paciente, podemos observar según los resultados que existe cierta correlación con sus parámetros de Glucosa, Insulina, Indice de resistencia a la insulina (HOMA), Resistina y MCP-1, también podemos observar que existe una leve correlación inversa con el índice de masa corporal, la edad y la adiponectina, y finalmente no existe relación alguna con la leptina.

3.2 Cálculo de autovectores

A continuación calcularemos los autovectores de los datos normalizados.

eigen_result = eigen(cov_matrix)
# Los autovectores se encuentran en la matriz "vectors" del resultado
autovectores = eigen_result$vectors
eigen_result$values
##  [1] 3.16962099 1.62378422 1.24426008 1.11420200 0.84636705 0.70534280
##  [7] 0.57330323 0.40139481 0.29261122 0.02911359

3.3 Selección de componentes principales

Ahora, revisemos cuales son los componentes principales de los datos.

#son 10 columnas, por lo que el cálculo lo realizamos sobre las 9 primeras, excluyendo
#la columna Classification
data_normalizada.pca = prcomp(data_normalizada[, 1:9], center=TRUE, scale. = TRUE)
summary(data_normalizada.pca)
## Importance of components:
##                           PC1    PC2    PC3    PC4     PC5     PC6     PC7
## Standard deviation     1.7489 1.2338 1.0805 1.0515 0.85002 0.81073 0.66449
## Proportion of Variance 0.3398 0.1691 0.1297 0.1229 0.08028 0.07303 0.04906
## Cumulative Proportion  0.3398 0.5090 0.6387 0.7615 0.84184 0.91487 0.96393
##                            PC8     PC9
## Standard deviation     0.54095 0.17894
## Proportion of Variance 0.03251 0.00356
## Cumulative Proportion  0.99644 1.00000

Como podemos observar, los primeros 7 componentes explican la mayor parte de la variabilidad presente en el conjunto de datos. Podemos ver la transformación lineal a continuación:

head(data_normalizada.pca$x, n=3)
##            PC1        PC2       PC3        PC4        PC5         PC6
## [1,] -1.984176 -0.1250696 0.3613016 -0.2729356 -0.4905239 -0.34318169
## [2,] -1.323090 -0.2468592 1.3309658  1.8862091 -0.1746008  0.08561203
## [3,] -1.211986 -0.9881059 0.3614967  0.9097251  1.3090830  1.38165278
##             PC7        PC8         PC9
## [1,] 0.27747423 -0.1990212 -0.24894048
## [2,] 0.08398515 -0.4389960  0.01880508
## [3,] 0.54471905  0.1561165  0.04414919

Agregando la columna Classification

pca_data <- data.frame(data_normalizada.pca$x, Classification=data_normalizada$Classification)
head(pca_data, n=3)

A continuación trazaremos los componentes principales:

Podemos usar plot_ly para mostrar un gráfico 3D de los componentes principales:

# Tenemos siete componentes principales PC1, PC2, PC3, PC4, PC5, PC6 y PC7
# Creamos un dataframe con los siete componentes principales y la columna "Classification" categórica
pca_data_3d <- data.frame(PC1 = pca_data$PC1, PC2 = pca_data$PC2, PC3 = pca_data$PC3,
                          PC4 = pca_data$PC4, PC5 = pca_data$PC5, PC6 = pca_data$PC6,
                          PC7 = pca_data$PC7, Classification = pca_data$Classification)

# Graficar en 3D usando plot_ly
plot_ly(data = pca_data_3d, x = ~PC1, y = ~PC2, z = ~PC3, color = ~Classification, 
        type = "scatter3d", mode = "markers", marker = list(size = 3))

Referencias

“Cáncer de Mama.” n.d. Accessed July 24, 2023. https://www.who.int/es/news-room/fact-sheets/detail/breast-cancer.
Galant, A. L., R. C. Kaufman, and J. D. Wilson. 2015. “Glucose: Detection and Analysis.” Food Chemistry 188 (December): 149–60. https://doi.org/10.1016/j.foodchem.2015.04.071.
Gonzalez, Maria Cristina, Maria Isabel T. D. Correia, and Steven B. Heymsfield. 2017. “A Requiem for BMI in the Clinical Setting.” Current Opinion in Clinical Nutrition and Metabolic Care 20 (5): 314–21. https://doi.org/10.1097/MCO.0000000000000395.
Matthews, D. R., J. P. Hosker, A. S. Rudenski, B. A. Naylor, D. F. Treacher, and R. C. Turner. 1985. “Homeostasis Model Assessment: Insulin Resistance and Beta-Cell Function from Fasting Plasma Glucose and Insulin Concentrations in Man.” Diabetologia 28 (7): 412–19. https://doi.org/10.1007/BF00280883.
Ogata, Hiroomi, Motohiro Takeya, Teizo Yoshimura, Katsumasa Takagi, and Kiyoshi Takahashi. 1997. “The Role of Monocyte Chemoattractant Protein-1 (Mcp-1) in the Pathogenesis of Collagen-Induced Arthritis in Rats.” The Journal of Pathology 182 (1): 106–14. https://doi.org/10.1002/(SICI)1096-9896(199705)182:1<106::AID-PATH816>3.0.CO;2-A.
Palomer, Xavier, Antonio Pérez, and Francisco Blanco-Vaca. 2005. “Adiponectina: Un Nuevo Nexo Entre Obesidad, Resistencia a La Insulina y Enfermedad Cardiovascular.” Medicina Clínica 124 (10): 388–95. https://doi.org/10.1157/13072576.
Quianzon, Celeste C., and Issam Cheikh. 2012. “History of Insulin.” Journal of Community Hospital Internal Medicine Perspectives 2 (2): 18701. https://doi.org/10.3402/jchimp.v2i2.18701.
Wellen, Kathryn E., and Gökhan S. Hotamisligil. 2005. “Inflammation, Stress, and Diabetes.” Journal of Clinical Investigation 115 (5): 1111–19. https://doi.org/10.1172/JCI200525102.